class MyCircularQueue {

    private int[] elem;//
    private int front;//表示队列的头
    private int rear;//表示队列的尾

    public void MyCircularQueue(int k) {
        //如果是浪费空间 这里必须处理多加一个1
        this.elem = new int[k+1];
    }

    /**
     * 入队列
     * @param value
     * @return
     */
    public boolean enQueue(int value) {
        //1.检查队列是否是满的
        if (isFull()) {
            return false;
        }
        //2.
        elem[rear] = value;
        //不能直接 rear++ , 因为如果 rear到7的位置, rear++到0位置 ,就异常了
        rear = (rear+1) % elem.length;
        return true;
    }

    /**
     * 出队列
     * @return
     */
    public boolean deQueue() {
        if (isEmpty()) {
            return false;
        }
        //不能直接 front++ , 还是因为会到7的位置 ,front
        front = (front+1) % elem.length;
        return true;
    }

    /**从队首获取元素。如果队列为空，返回 -1
     *
     * @return
     */
    public int Front() {
        if (isEmpty()) {
            return -1;
        }
        return elem[front];
    }

    /**
     * 获取队尾元素。如果队列为空，返回 -1
     * @return
     */
    public int Rear() {
        if (isEmpty()) {
            return -1;
        }
        //index的值为 : 如果rear为0 的时候 返回elem.length -1 . 不为0 , 返回 rear -1
        int index = (rear == 0) ? elem.length-1 : rear-1;
        return elem[index];
    }

    public boolean isEmpty() {
        return front == rear;
    }

    /**
     * 队列是否为满
     * 如果 rear和 front 相遇了 , 队列就满了
     * @return
     */
    public boolean isFull() {
        if ( (rear+1) % elem.length == front) {
            return true;
        }
        return false;
    }
}
